
/**
 * 循环队列
 *
 * @param
 */
public class MyQueue3 {

        public int[] elem;
        public int front;
        public int rear;

        public MyQueue3(int k) {
            this.elem = new int[k+1];
        }

        public boolean enQueue(int value) {
            if(isFull()) {
                return false;
            }
            elem[rear] = value;
            rear = (rear + 1) % elem.length;
            return true;
        }

        public boolean deQueue() {
            if(isEmpty()) {
                return false;
            }
            front = (front + 1) % elem.length;
            return true;
        }

        public int Front() {
            if(isEmpty()) {
                return -1;
            }
            return elem[front];
        }

        public int Rear() {
            if(isEmpty()) {
                return -1;
            }
            int index = 0;
            if(rear == 0) {
                index = elem.length - 1;
            } else {
                index = rear - 1;
            }
            return elem[index];
        }

        public boolean isEmpty() {
            return front == rear;
        }

        public boolean isFull() {
            return (rear + 1) % elem.length == front;
        }

}
